#!/bin/bash

# 定义颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color

echo ">>> 1. 检查 RPM 包安装状态..."
if rpm -q boostkit-kaccjson > /dev/null 2>&1; then
    echo -e "${GREEN}[OK] RPM 包已安装: $(rpm -q boostkit-kaccjson)${NC}"
else
    echo -e "${RED}[ERROR] 未检测到 boostkit-kaccjson 包，请先执行 rpm -ivh 安装${NC}"
    exit 1
fi

echo ">>> 2. 检查关键文件是否存在..."
HEADER_FILE="/usr/include/kacc_json/kacc_json.h"
LIB_FILE="/usr/lib64/libkaccgson.a"

if [ -f "$HEADER_FILE" ] && [ -f "$LIB_FILE" ]; then
    echo -e "${GREEN}[OK] 头文件存在: $HEADER_FILE${NC}"
    echo -e "${GREEN}[OK] 静态库存在: $LIB_FILE${NC}"
else
    echo -e "${RED}[ERROR] 文件缺失！请检查 RPM 安装路径${NC}"
    ls -l $HEADER_FILE $LIB_FILE 2>/dev/null
    exit 1
fi

echo ">>> 3. 进行编译与链接测试..."

# 检查是否有 g++
if ! command -v g++ &> /dev/null; then
    echo "正在安装 g++ 编译器..."
    dnf install -y gcc-c++ > /dev/null 2>&1
fi

# 创建一个最小化的 C++ 测试代码
cat > test_kacc.cpp <<EOF
#include <iostream>
// 引入 KaccJSON 头文件，验证路径是否正确
#include <kacc_json/kacc_json.h>

int main() {
    std::cout << "KaccJSON 编译链接测试成功！" << std::endl;
    // 这里并没有实际调用库函数，主要测试头文件引用和静态库链接是否报错
    return 0;
}
EOF

# 编译指令：
# -o test_kacc : 输出文件名
# -lkaccgson   : 链接 libkaccgson.a (系统会自动在 /usr/lib64 找 libkaccgson.a)
# -lpthread    : 静态库通常可能依赖线程库，保险起见加上（可选）
g++ test_kacc.cpp -o test_kacc -lkaccgson

if [ $? -eq 0 ]; then
    echo -e "${GREEN}[OK] 编译成功${NC}"
    echo ">>> 运行测试程序:"
    ./test_kacc
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}=================================${NC}"
        echo -e "${GREEN}      验证全部通过 (Pass)        ${NC}"
        echo -e "${GREEN}=================================${NC}"
    fi
    # 清理临时文件
    rm -f test_kacc test_kacc.cpp
else
    echo -e "${RED}[ERROR] 编译失败！请检查静态库兼容性或头文件路径${NC}"
    exit 1
fi